package cn.biplam.common.bean.md;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.client.DataFilter;
import cn.biplam.common.paramters.ModelType.Model_Type;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.UserInfo;

/**
 *  模型表数据访问操作类
 * @author XiaoRuxing Oct 28, 200911:43:48 AM
 * @version 1.0
 */
public abstract class MdTable extends Bean{
	
	/**
	 * 取模型对象的表名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getID() throws ErrorMessage;

	/**
	 * 取模型对象的表名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getName() throws ErrorMessage;

	/**
	 * 取模型对象的表中文名称
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getCnName() throws ErrorMessage;

	/**
	 * 取模型对象的表说明
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getDesc() throws ErrorMessage;

	/**
	 * 取模型对象的表说明：物理名称(逻辑名称)
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getsDetailDesc() throws ErrorMessage;

	/**
	 * 取探查结果 主键唯一性
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getPkUnion() throws ErrorMessage;

	/**
	 * 取探查结果 外键完整性
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getFkIntegrity() throws ErrorMessage;

	/**
	 * 取探查结果 外键是否存在空值
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getFkExsitNull() throws ErrorMessage;

	/**
	 * 获取主键字段描述（多个主键字段逗号隔开）
	 * @return
	 */
	public abstract String getPkColumns();

	/**
	 * 取探查结果 主键探查结果描述
	 * @return
	 * @throws ErrorMessage
	 */
	public abstract String getPkResultDesc() throws ErrorMessage;

	/**
	 * 取表所在的的主题
	 * @return
	 * @throws ErrorMessage 
	 */
	public abstract String getTheme() throws ErrorMessage;

	/**
	 * 表所在获取数据源ID
	 * @return
	 * @throws ErrorMessage 
	 */
	public abstract String getSDbsId() throws ErrorMessage;

	/**
	 * 更新记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract void update(DataFilter filter) throws ErrorMessage;

	/**
	 * 插入记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract String insert(DataFilter filter) throws ErrorMessage;

	/**
	 * 插入记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract void delete() throws ErrorMessage;

	/**
	 * 判断对象信息是否存在
	 * @return
	 */
	public abstract boolean exist();
	
	/**
	 * 新建模型表数据访问实例(根据模型表id 模型对象类型来初始化数据)
	 * @param mUser     用户信息
	 * @param tableId   表ID
	 * @param modelType 模型类型
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdTable getNewInstance(UserInfo mUser,String tableId,String modelType) throws ErrorMessage{
		return (MdTable)get(MdTable.class.getSimpleName(), mUser, tableId, modelType);
	}
	
	/**
	 * 新建模型表数据访问实例根据模型表id 模型对象类型来初始化数据
	 * @param userId    用户ID
	 * @param tableId   表ID
	 * @param modelType 模型类型
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdTable getNewInstance(String userId,String tableId,String modelType) throws ErrorMessage{
		return (MdTable)get(MdTable.class.getSimpleName(), userId, tableId, modelType);
	}
	
	/**
	 * 新建模型表数据访问实例(根据模型表表明 模型对象类型来初始化数据)
	 * @param userID 用户ID
	 * @param modelType 模型类型
	 * @param tableName 表名
	 * @return 实例
	 * @throws ErrorMessage
	 */
	public static MdTable getNewInstance(String userID,Model_Type modelType,String tableName) throws ErrorMessage{
		return (MdTable)get(MdTable.class.getSimpleName(), userID, modelType, tableName);
	}
	
	/** 表id字段名 */
	public abstract String getOID();
	
	/** 表名称字段名 */
	public abstract String getTABLE_NAME();
	
	/** 表中文名字段名 */
	public abstract String getTABLE_CNAME();
	
	/** 表说明字段名 */
	public abstract String getTABLE_DESC();
	
	/** 主题ID 字段名称*/
	public abstract String getMID();
	
	/** 主键唯一*/
	public abstract String getPK_UNIQUE();
	
	/** 外键完整性*/
	public abstract String getFK_INTEGRITY();
	
	/** 外键是否存在空值*/
	public abstract String getFK_EXIST_EMPTY();
	
	/** 主键探查结果描述 */
	public abstract String getDBS_PK_RESULT_DESC();

}